package ClasesBasicas;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Tablero {

	static Connection con;

	int altura = 8;
	int anchura = 8;

	int codPartida;
	Figura[][] array;
	protected boolean[][] aMovimiento;
	Figura[][]aComidas;
	String nombre;
	

	public Figura[][] getaComidas() {
		return aComidas;
	}

	public void setaComidas(Figura[][] aComidas) {
		this.aComidas = aComidas;
	}

	public int getCodPartida() {
		return codPartida;
	}

	public void setCodPartida(int codPartida) {
		this.codPartida = codPartida;
	}

	public Figura[][] getArray() {
		return array;
	}

	public void setArray(Figura[][] array) {
		this.array = array;
	}

	public boolean[][] getaMovimiento() {
		return aMovimiento;
	}

	public void setaMovimiento(boolean[][] aMovimiento) {
		this.aMovimiento = aMovimiento;
	}
	
	public String getNombre(){
		return nombre;
	}
	
	public void setNombre( String nombre){
		this.nombre=nombre;
	}

	public Tablero(boolean partidaEmpezada,int codigoPartida) {
		conexionBaseDatos();
		if(!partidaEmpezada){
			codPartida = 1;
		try {
			generarCodigo();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		this.codPartida = codPartida;
		}else{
			codPartida=codigoPartida;
		}
		array = new Figura[anchura][altura];
		aMovimiento = new boolean[anchura][altura];

		if (partidaEmpezada) {
			System.out.println("Codigo de la partida"+codPartida);
			cargarPartida(codPartida);
		} else {
			inicializarArray();
		}
		cerrarConexion();

	}

	public void generarCodigo() throws Exception {
		conexionBaseDatos();

		String query = "SELECT * FROM Partida";
		Statement statement = con.createStatement();
		ResultSet rs = statement.executeQuery(query);
		int b = 0;
		int a = 0;
		boolean fin = false;
		while ((rs.next()) && (!fin)) {
			a = rs.getInt("CodPartida");
			if (b != a)
				fin = true;
			else
				b++;
		}
		rs.close();
		statement.close();
		codPartida = b;
		cerrarConexion();

	}

	// System.out.println("COdigo generado:"+codPartida);

	// }

	public void conexionBaseDatos() {

		try {
			Class.forName("org.sqlite.JDBC");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("driver no encontrado");
		}
		try {
			con = DriverManager
					.getConnection("jdbc:sqlite:db/BaseProyect.s3db");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("No se pudo conectar a la base de datos");
		}
		System.out.println("Conexion establecida...");

	}

	public void cerrarConexion() {

		try {
			con.close();
		} catch (SQLException e) {

			System.out.println("No se pudo cerrar correctamente");
		}
		System.out.println("Conexion cerrada...");
	}

	public void cargarPartida(int codPartida) {
	try {
		conexionBaseDatos();
		System.out.println("Codigo="+codPartida);

		String query = "SELECT * FROM Pieza WHERE CodPartida="+codPartida+";";
		Statement statement = con.createStatement();
		ResultSet rs = statement.executeQuery(query);
		int a=0;
		while (rs.next()) {
			int fila=rs.getInt("Posicion_X");
			int columna=rs.getInt("Posicion_Y");
			
			if(rs.getInt("CodPieza")==0){
				array[fila][columna]=
						new Torre(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==8){
				array[fila][columna]=
						new Caballo(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==16){
				array[fila][columna]=
						new Alfil(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==31){
				array[fila][columna]=
						new Reina(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==24){
				array[fila][columna]=
						new Rey(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==20){
				array[fila][columna]=
						new Alfil(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==12){
				array[fila][columna]=
						new Caballo(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==4){
				array[fila][columna]=
						new Torre(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==17){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==25){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==29){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==21){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==1){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==9){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==13){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==5){
				array[fila][columna]=
						new Peon(fila, columna, true, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==2){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==10){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==14){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==6){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==18){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==26){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==30){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==22){
				array[fila][columna]=
						new Peon(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==3){
				array[fila][columna]=
						new Torre(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==11){
				array[fila][columna]=
						new Caballo(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==19){
				array[fila][columna]=
						new Alfil(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==27){
				array[fila][columna]=
						new Reina(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==28){
				array[fila][columna]=
						new Rey(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==23){
				array[fila][columna]=
						new Alfil(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==15){
				array[fila][columna]=
						new Caballo(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
			if(rs.getInt("CodPieza")==7){
				array[fila][columna]=
						new Torre(fila, columna, false, this.getArray(),
						this.getaMovimiento(),0);
			}
			
		}
			
			
			
			rs.close();
			statement.close();
			
			cerrarConexion();
	}catch(Exception ex){
		
	}
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			/**
			
			
			
			
			int i= rs.getInt("Posicion_X");
			int j= rs.getInt("Posicion_Y");
			String color= rs.getString("Color");
			int codPieza= rs.getInt("CodPieza");
			String tipo=  rs.getString("Tipo");
			if (tipo== "Alfil") a=1;
			else if (tipo=="Caballo") a=2;
			else if (tipo=="Peon") a=3;
			else if (tipo == "Reina") a=4;
			else if (tipo== "Rey") a=5;
			else if (tipo == "Torre") a=6;
			switch (a){
			case 1:if (color =="Blanco"){
				if (codPieza==19){
					Alfil fBI = new Alfil(j, i, false, this.getArray(),
							this.getaMovimiento(),19);
					array[j][i]=fBI;
				}
				else{
					Alfil fBI = new Alfil(j, i, false, this.getArray(),
							this.getaMovimiento(),codPieza);
					array[j][i]=fBI;
				}
			}
			else{
				if (codPieza==16){
					Alfil fNI = new Alfil(j, i, true, this.getArray(),
							this.getaMovimiento(),16);
					array[j][i]=fNI;
				}
				else{
					Alfil fNI = new Alfil(j, i, true, this.getArray(),
							this.getaMovimiento(),codPieza);
					array[j][i]=fNI;
				}
			}; break;
				
			case 2: if (color=="Blanco"){
						if (codPieza==11)
							{Caballo cBI = new Caballo(j, i, false, this.getArray(),
								this.getaMovimiento(),11);
							array[j][i]=cBI;
							}
						else
							{Caballo cBD = new Caballo(j, i, false, this.getArray(),
									this.getaMovimiento(),codPieza);
						array[j][i]=cBD;
					}
			}
					else{
						if (codPieza ==8){
							Caballo cNI = new Caballo(j, i, true, this.getArray(),
									this.getaMovimiento(),8);
							array[j][i]=cNI;
						}
						else{
							Caballo cNI = new Caballo(j, i, true, this.getArray(),
									this.getaMovimiento(),codPieza);
							array[j][i]=cNI;
						}
				
					};break;
			case 3:if (color=="Blanco"){
				if (codPieza==2){
					Peon pB0 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),2);
					array[j][i]=pB0;
				}
				else if(codPieza==6){
					Peon pB7 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),6);
				array[j][i]=pB7;}
				else if (codPieza==10){
					Peon pB1 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),10);
					array[j][i]=pB1;
				}
				else if (codPieza==14){
					Peon pB6 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),14);
					array[j][i]=pB6;
				}
				else if(codPieza==18){
					Peon pB2 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),18);
					array[j][i]=pB2;
				}
				else if (codPieza==22){
					Peon pB5 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),22);
					array[j][i]=pB5;
				}
				else if (codPieza ==26){
					Peon pB3 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),26);
					array[j][i]=pB3;
				}
				else {
					Peon pB4 = new Peon(j, i, false, this.getArray(),
							this.getaMovimiento(),codPieza);
					array[j][i]=pB4;
				}
			}
			if (color=="Negro"){
				if (codPieza==1){
					Peon pN0 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),1);
					array[j][i]=pN0;
				}
				else if(codPieza==6){
					Peon pN7 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),5);
				array[j][i]=pN7;}
				else if (codPieza==10){
					Peon pN1 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),9);
					array[j][i]=pN1;
				}
				else if (codPieza==14){
					Peon pN6 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),13);
					array[j][i]=pN6;
				}
				else if(codPieza==18){
					Peon pN2 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),17);
					array[j][i]=pN2;
				}
				else if (codPieza==22){
					Peon pN5 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),21);
					array[j][i]=pN5;
				}
				else if (codPieza ==26){
					Peon pN3 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),25);
					array[j][i]=pN3;
				}
				else {
					Peon pN4 = new Peon(j, i, true, this.getArray(),
							this.getaMovimiento(),codPieza);
					array[j][i]=pN4;
				}
			};break;
			case 4: if (color=="Blanco"){
				Reina rB = new Reina(j, i, false, this.getArray(),
						this.getaMovimiento(),27);
				array[j][i]=rB;
			}
			else{
				Reina rN = new Reina(j, i, true, this.getArray(),
						this.getaMovimiento(),codPieza);
						array[j][i]=rN;
						};break;
			case 5: if (color=="Blanco"){
				Rey reyB = new Rey(j, i, false, this.getArray(),
						this.getaMovimiento(),28);
				array[j][i]=reyB;
			}
			else{
				Rey reyN = new Rey(j, i, true, this.getArray(),
						this.getaMovimiento(),codPieza);
				array[j][i]=reyN;
			};break;
			case 6: if (color=="Blanco"){
				if (codPieza==3){
					Torre tBI = new Torre(j, i, false, this.getArray(),
							this.getaMovimiento(),3);
					array[j][i]=tBI;
				}
				else{
					Torre tBD= new Torre(j, i, false, this.getArray(),
							this.getaMovimiento(),codPieza);
					array[j][i]=tBD;
				}
			}
			else{
				if (codPieza==0){
					Torre tNI = new Torre(j, i, true, this.getArray(),
							this.getaMovimiento(),0);
					array[j][i]=tNI;
				}
				else{
					Torre tND = new Torre(j, i, true, this.getArray(),
							this.getaMovimiento(),codPieza);
					array[j][i]=tND;
				}
			};break;
				
			}
		}
		
		rs.close();
		statement.close();
		
		cerrarConexion();
		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	**/

	}
	

	public void inicializarArray() {

		for (int i = 0; i < array.length; i++) {
			switch (i) {
			case 0: System.out.println("Case 0");
				Torre tNI = new Torre(0, i, true, this.getArray(),
						this.getaMovimiento(),0);
				array[0][i]=tNI;
				Peon pN0 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),1);
				array[1][i]=pN0;
				Peon pB0 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),2);
				array[6][i]=pB0;
				Torre tBI = new Torre(7, i, false, this.getArray(),
						this.getaMovimiento(),3);
				array[7][i]=tBI;
				break;
			
			case 7: System.out.println("Case 7");
				Torre tND = new Torre(0, i, true, this.getArray(),
						this.getaMovimiento(),4);
				array[0][i]=tND;
				Peon pN7 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),5);
				array[1][i]=pN7;
				Peon pB7 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),6);
				array[6][i]=pB7;
				Torre tBD = new Torre(7, i, false, this.getArray(),
						this.getaMovimiento(),7);
				array[7][i]=tBD;
			break;
			case 1: System.out.println("Case 1");
				Caballo cNI = new Caballo(0, i, true, this.getArray(),
						this.getaMovimiento(),8);
				array[0][i]=cNI;
				Peon pN1 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),9);
				array[1][i]=pN1;
				Peon pB1 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),10);
				array[6][i]=pB1;
				Caballo cBI = new Caballo(7, i, false, this.getArray(),
						this.getaMovimiento(),11);
				array[7][i]=cBI;
			break;
			case 6: System.out.println("Case 6");
				Caballo cND = new Caballo(0, i, true, this.getArray(),
						this.getaMovimiento(),12);
				array[0][i]=cND;
				Peon pN6 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),13);
				array[1][i]=pN6;
				Peon pB6 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),14);
				array[6][i]=pB6;
				Caballo cBD = new Caballo(7, i, false, this.getArray(),
						this.getaMovimiento(),15);
				array[7][i]=cBD;
			break;
			case 2: System.out.println("Case 2");
				Alfil fNI = new Alfil(0, i, true, this.getArray(),
						this.getaMovimiento(),16);
				array[0][i]=fNI;
				Peon pN2 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),17);
				array[1][i]=pN2;
				Peon pB2 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),18);
				array[6][i]=pB2;
				Alfil fBI = new Alfil(7, i, false, this.getArray(),
						this.getaMovimiento(),19);
				array[7][i]=fBI;
			break;
			case 5: System.out.println("Case 5");
				Alfil fND = new Alfil(0, i, true, this.getArray(),
						this.getaMovimiento(),20);
				array[0][i]=fND;
				Peon pN5 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),21);
				array[1][i]=pN5;
				Peon pB5 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),22);
				array[6][i]=pB5;
				Alfil fBD = new Alfil(7, i, false, this.getArray(),
						this.getaMovimiento(),23);
				array[7][i]=fBD;
			break;
			case 3: System.out.println("Case 3");
			Reina rN = new Reina(0, i, true, this.getArray(),
					this.getaMovimiento(),31);
				array[0][i]=rN;
				
				Peon pN3 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),25);
				array[1][i]=pN3;
				Peon pB3 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),26);
				array[6][i]=pB3;
				Reina rB = new Reina(7, i, false, this.getArray(),
						this.getaMovimiento(),27);
				array[7][i]=rB;
			break;
			case 4: System.out.println("Case 4");
				Rey reyB = new Rey(7, i, false, this.getArray(),
						this.getaMovimiento(),28);
				array[7][i]=reyB;
				Peon pN4 = new Peon(1, i, true, this.getArray(),
						this.getaMovimiento(),29);
				array[1][i]=pN4;
				Peon pB4 = new Peon(6, i, false, this.getArray(),
						this.getaMovimiento(),30);
				array[6][i]=pB4;
				Rey reyN = new Rey(0, i, true, this.getArray(),
						this.getaMovimiento(),24);
				array[0][i]=reyN;
				
			break;
			}

		}
	}

	public void resetearJuego() {
		int i;
		for (i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				array[i][j] = null;

			}
		}
	}

	public static void main(String[] args) {
		//Tablero t= new Tablero(false);
		
		/*for (int i=0; i<t.array.length; i++){
			for (int j=0; j<t.array.length; j++){
				if (t.array[i][j]!=null){
					int a = t.array[i][j].getFila();
				System.out.print(a);
				}
				else System.out.print("null");
				System.out.print(" ");
			}
			System.out.println();
		}
		*/
		/*t.inicializarArray();
		
		for (int i=0; i<t.array.length; i++){System.out.println("i="+i);
			for (int j=0; j<t.array.length; j++){System.out.println("j="+j);
				if(t.getArray()[i][j]!=null)
				System.out.print(t.getArray()[i][j].esNegra+" "+t.getArray()[i][j].getTipo());System.out.print("- ");
			}
		System.out.println("");
	}
	**/

}
	
}
